using System;
using Sinacor.Servico.Bovespa.Ordens.BusinessEntity;
using Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response;
using System.ComponentModel;
using System.Collections.Generic;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator
{
	public class TranslateBetweenNegocioAndNegocioResponse
	{
	public static Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.NegocioResponse TranslateNegocioToNegocioResponse(Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Negocio from)
		{
			Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.NegocioResponse to = new Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.NegocioResponse();
			
            to.DataMovimento = from.DataMovimento;
            to.Bolsa = from.Bolsa;
            to.DataPregao = from.DataPregao;
            to.DataNegocio = from.DataPregao.HasValue ? from.DataPregao.Value : DateTime.MinValue;
        
            to.HoraNegocio = from.HoraNegocio;
            to.TipoNaturezaOperacao = (DataContract.Enum.TipoNaturezaOperacao)from.TipoNaturezaOperacao;
			to.NumeroNegocio = from.NumeroNegocio.Value;
            to.ContraParte = from.ContraParte.Value;

            to.DigitoNegocio = from.DigitoNegocio;
			to.TipoMercado =  (DataContract.Enum.TipoMercado?)from.TipoMercado;
            to.TipoTermo = (DataContract.Enum.TipoTermo?) from.TipoTermo;
			to.Titulo = Sinacor.Servico.Bovespa.Titulo.Service.ServiceImplementation.Translator.TranslateTituloResponse.ToTituloResponse(from.Titulo);

            //propriedade foi desnormalizada para se adequar a um bug existente no
            //componente de grid 
            if (from.Titulo != null)
                to.CodigoTitulo = from.Titulo.Codigo;
        
            to.PrazoTermo = from.PrazoTermo;
            to.VencimentoOpcoesTermo = from.VencimentoOpcoesTermo;           
            to.TituloObjeto = from.TituloObjeto;
            to.TipoOrigem = (DataContract.Enum.TipoOrigemNegocio?) from.TipoOrigem;
            to.Quantidade = from.Quantidade;
            to.Preco = from.Preco;
            to.PontaGeradoraOferta = from.PontaGeradoraOferta;
            to.NaoLiquidaNota = from.NaoLiquidaNota;
            to.NegociadoAfterMarket = from.NegociadoAfterMarket;
            to.Observacao = from.Observacao;
            to.CodigoCorrespondente = from.Correspondente.Codigo;
            to.PercentualCorrespondente = from.Correspondente.PercentualComissao;
            to.TipoLiquidacao = (DataContract.Enum.TipoLiquidacaoNegocio?)from.TipoLiquidacaoNegocio;
            to.Estrategia = (DataContract.Enum.TipoEstrategia?) from.TipoEstrategia;
            to.TipoOfertaBovespaFix = (DataContract.Enum.TipoOfertaBovespaFix?) from.TipoOfertaBovespaFix;

            to.Saldo = from.Saldo;
            to.QuantidadeCasada = from.QuantidadeCasada;            
            to.Cliente = from.CodigoCliente;

            if(from.DiasLiquidacao != null)
            to.DiasLiquidacao = from.DiasLiquidacao.Value;

            to.Operador = from.DescricaoOperador;
            to.TipoCasamento = (DataContract.Enum.TipoCasamento)from.TipoCasamento;

            to.FatorValorizacao = from.FatorValorizacao.HasValue ? from.FatorValorizacao.Value : 0;
            to.TipoOrigem = (DataContract.Enum.TipoOrigemNegocio?)from.TipoOrigem;
            to.TipoSituacao = (DataContract.Enum.TipoSituacaoCasamento?)from.TipoSituacaoCasamentoOrdem;
			return to;
		}


		public static List<DataContract.Response.NegocioResponse> TranslateNegocioCollectionToNegocioResponseCollection(List<BusinessEntity.Negocio> from)
		{
			if (from == null) return null;

			List<DataContract.Response.NegocioResponse> to = null;

			if (from != null)
			{
				to = new List<DataContract.Response.NegocioResponse>();
				foreach (BusinessEntity.Negocio negocio in from)
				{
					to.Add(TranslateBetweenNegocioAndNegocioResponse.TranslateNegocioToNegocioResponse(negocio));
				}
			}

			return to;
		}
	}
}

